Use the behavior of the GtkFileSelection to determine selected paths in
authorJan Arne Petersen <jpetersen@uni-bonn.de>
Mon, 8 Dec 2003 23:38:57 +0000 (23:38 +0000)
committerFederico Mena Quintero <federico@src.gnome.org>
Mon, 8 Dec 2003 23:38:57 +0000 (23:38 +0000)
2003-12-08  Jan Arne Petersen  <jpetersen@uni-bonn.de>

* gtk/gtkfilechooserdefault.c:
(gtk_file_chooser_default_get_paths), (entry_activate): Use the
behavior of the GtkFileSelection to determine selected paths in
single selected, GTK_FILE_CHOOSER_ACTION_SAVE mode.

2003-12-08  Federico Mena Quintero  <federico@ximian.com>

* gtk/gtkfilechooserdefault.c
(gtk_file_chooser_default_get_paths): Don't declare the closure
struct twice.
(get_paths_foreach): Likewise.

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkfilechooserdefault.c

index f9c1f0d077dc53558eed7a471604798263945e6e..5244f4e9b6a29b020657e3790e5b33190a67d2d7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2003-12-08  Jan Arne Petersen  <jpetersen@uni-bonn.de>
+
+       * gtk/gtkfilechooserdefault.c:
+       (gtk_file_chooser_default_get_paths), (entry_activate): Use the
+       behavior of the GtkFileSelection to determine selected paths in
+       single selected, GTK_FILE_CHOOSER_ACTION_SAVE mode.
+
+2003-12-08  Federico Mena Quintero  <federico@ximian.com>
+
+       * gtk/gtkfilechooserdefault.c
+       (gtk_file_chooser_default_get_paths): Don't declare the closure
+       struct twice.
+       (get_paths_foreach): Likewise.
+
 Tue Dec  9 00:12:36 2003  Matthias Clasen  <maclas@gmx.de>
 
        * gtk/gtkfilesystemwin32.[hc]: s/Unix/Win32/g. 
index f9c1f0d077dc53558eed7a471604798263945e6e..5244f4e9b6a29b020657e3790e5b33190a67d2d7 100644 (file)
@@ -1,3 +1,17 @@
+2003-12-08  Jan Arne Petersen  <jpetersen@uni-bonn.de>
+
+       * gtk/gtkfilechooserdefault.c:
+       (gtk_file_chooser_default_get_paths), (entry_activate): Use the
+       behavior of the GtkFileSelection to determine selected paths in
+       single selected, GTK_FILE_CHOOSER_ACTION_SAVE mode.
+
+2003-12-08  Federico Mena Quintero  <federico@ximian.com>
+
+       * gtk/gtkfilechooserdefault.c
+       (gtk_file_chooser_default_get_paths): Don't declare the closure
+       struct twice.
+       (get_paths_foreach): Likewise.
+
 Tue Dec  9 00:12:36 2003  Matthias Clasen  <maclas@gmx.de>
 
        * gtk/gtkfilesystemwin32.[hc]: s/Unix/Win32/g. 
index f9c1f0d077dc53558eed7a471604798263945e6e..5244f4e9b6a29b020657e3790e5b33190a67d2d7 100644 (file)
@@ -1,3 +1,17 @@
+2003-12-08  Jan Arne Petersen  <jpetersen@uni-bonn.de>
+
+       * gtk/gtkfilechooserdefault.c:
+       (gtk_file_chooser_default_get_paths), (entry_activate): Use the
+       behavior of the GtkFileSelection to determine selected paths in
+       single selected, GTK_FILE_CHOOSER_ACTION_SAVE mode.
+
+2003-12-08  Federico Mena Quintero  <federico@ximian.com>
+
+       * gtk/gtkfilechooserdefault.c
+       (gtk_file_chooser_default_get_paths): Don't declare the closure
+       struct twice.
+       (get_paths_foreach): Likewise.
+
 Tue Dec  9 00:12:36 2003  Matthias Clasen  <maclas@gmx.de>
 
        * gtk/gtkfilesystemwin32.[hc]: s/Unix/Win32/g. 
index f9c1f0d077dc53558eed7a471604798263945e6e..5244f4e9b6a29b020657e3790e5b33190a67d2d7 100644 (file)
@@ -1,3 +1,17 @@
+2003-12-08  Jan Arne Petersen  <jpetersen@uni-bonn.de>
+
+       * gtk/gtkfilechooserdefault.c:
+       (gtk_file_chooser_default_get_paths), (entry_activate): Use the
+       behavior of the GtkFileSelection to determine selected paths in
+       single selected, GTK_FILE_CHOOSER_ACTION_SAVE mode.
+
+2003-12-08  Federico Mena Quintero  <federico@ximian.com>
+
+       * gtk/gtkfilechooserdefault.c
+       (gtk_file_chooser_default_get_paths): Don't declare the closure
+       struct twice.
+       (get_paths_foreach): Likewise.
+
 Tue Dec  9 00:12:36 2003  Matthias Clasen  <maclas@gmx.de>
 
        * gtk/gtkfilesystemwin32.[hc]: s/Unix/Win32/g. 
index f9c1f0d077dc53558eed7a471604798263945e6e..5244f4e9b6a29b020657e3790e5b33190a67d2d7 100644 (file)
@@ -1,3 +1,17 @@
+2003-12-08  Jan Arne Petersen  <jpetersen@uni-bonn.de>
+
+       * gtk/gtkfilechooserdefault.c:
+       (gtk_file_chooser_default_get_paths), (entry_activate): Use the
+       behavior of the GtkFileSelection to determine selected paths in
+       single selected, GTK_FILE_CHOOSER_ACTION_SAVE mode.
+
+2003-12-08  Federico Mena Quintero  <federico@ximian.com>
+
+       * gtk/gtkfilechooserdefault.c
+       (gtk_file_chooser_default_get_paths): Don't declare the closure
+       struct twice.
+       (get_paths_foreach): Likewise.
+
 Tue Dec  9 00:12:36 2003  Matthias Clasen  <maclas@gmx.de>
 
        * gtk/gtkfilesystemwin32.[hc]: s/Unix/Win32/g. 
index 97531291437c83199596130b2060d9f5af3ed001..766111b2001a8642709f0e8d069f550ee6cd9be9 100644 (file)
@@ -1955,6 +1955,11 @@ gtk_file_chooser_default_unselect_all (GtkFileChooser *chooser)
   gtk_tree_selection_unselect_all (selection);
 }
 
+struct get_paths_closure {
+  GSList *result;
+  GtkFileChooserDefault *impl;
+};
+
 static void
 get_paths_foreach (GtkTreeModel *model,
                   GtkTreePath   *path,
@@ -1964,11 +1969,9 @@ get_paths_foreach (GtkTreeModel *model,
   GtkTreePath *child_path;
   GtkTreeIter child_iter;
   const GtkFilePath *file_path;
+  struct get_paths_closure *info;
 
-  struct {
-    GSList *result;
-    GtkFileChooserDefault *impl;
-  } *info = data;
+  info = data;
 
   child_path = gtk_tree_model_sort_convert_path_to_child_path (info->impl->sort_model, path);
   gtk_tree_model_get_iter (GTK_TREE_MODEL (info->impl->list_model), &child_iter, child_path);
@@ -1983,20 +1986,50 @@ gtk_file_chooser_default_get_paths (GtkFileChooser *chooser)
 {
   GtkFileChooserDefault *impl = GTK_FILE_CHOOSER_DEFAULT (chooser);
   GtkTreeSelection *selection;
+  struct get_paths_closure info;
+
+  if (gtk_file_chooser_get_action (chooser) == GTK_FILE_CHOOSER_ACTION_SAVE)
+    {
+      if (!gtk_file_chooser_get_select_multiple (chooser))
+       {
+         GtkFileChooserEntry *chooser_entry = GTK_FILE_CHOOSER_ENTRY (impl->entry);
+         const GtkFilePath *folder_path = _gtk_file_chooser_entry_get_current_folder (chooser_entry);
+         const gchar *file_part = _gtk_file_chooser_entry_get_file_part (chooser_entry);
+
+         if (file_part != NULL && file_part[0] != '\0')
+           {
+             GtkFilePath *selected;
+             GError *error = NULL;
+
+             selected = gtk_file_system_make_path (impl->file_system, folder_path, file_part, &error);
 
-  struct {
-    GSList *result;
-    GtkFileChooserDefault *impl;
-  } info = { NULL, };
+             if (!selected)
+               {
+                 char *msg;
+
+                 msg = g_strdup_printf (_("Could not build file name from '%s' and '%s':\n%s"),
+                                        gtk_file_path_get_string (folder_path),
+                                        file_part,
+                                        error->message);
+                 error_message (impl, msg);
+                 g_free (msg);
+                 return NULL;
+               }
+
+             return g_slist_append (NULL, selected);
+           }
+       }
+    }
 
   if (!impl->sort_model)
     return NULL;
 
   selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->list));
 
+  info.result = NULL;
   info.impl = impl;
-  gtk_tree_selection_selected_foreach (selection,
-                                      get_paths_foreach, &info);
+
+  gtk_tree_selection_selected_foreach (selection, get_paths_foreach, &info);
   return g_slist_reverse (info.result);
 }
 
@@ -2513,6 +2546,13 @@ entry_activate (GtkEntry              *entry,
 
       if (!info)
        {
+         if ((gtk_file_chooser_get_action (GTK_FILE_CHOOSER (impl)) == GTK_FILE_CHOOSER_ACTION_SAVE &&
+             !gtk_file_chooser_get_select_multiple (GTK_FILE_CHOOSER (impl))))
+           {
+             g_object_unref (folder);
+             gtk_file_path_free (subfolder_path);
+             return;
+           }
          error_getting_info_dialog (impl, subfolder_path, error);
          g_object_unref (folder);
          gtk_file_path_free (subfolder_path);